package cn.jsj.dao;

import java.util.List;

import org.hibernate.criterion.Restrictions;

import cn.jsj.pojo.TblRoyaltyInfo;
import cn.jsj.pojo.TblUtils;

/**
 * 提成详情处理类
 * @author LI
 *
 */
public class TblRoyaltyInfoDAO  {


	/**
	 * 根据合同号获得提成总金额
	 * @param contractId：合同编号
	 * @return：律师提成总金额
	 */

	public int getRoyaltyMoney(String contractId){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		//
		List result=session.createCriteria(TblRoyaltyInfo.class).add(
				Restrictions.eq("caseNumber",contractId))
				.list();
		// 提交事务
		tx.commit();
		session.close();
		//总金额
		 int totalMoney=0;
		 TblRoyaltyInfo tri=new TblRoyaltyInfo();
		//遍历队列，获得总金额
		for(int i=0;i<result.size();i++){
			tri=(TblRoyaltyInfo)result.get(i);
			totalMoney=totalMoney+tri.getRoyaltyMoney();
		}
		return totalMoney;
	}

	/**
	 * 根据合同号获取提成详情
	 * @param contractId：合同号
	 * @return：提成详情
	 */
	public String getRoyaltyDetail(String contractId){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=session.createCriteria(TblRoyaltyInfo.class).add(
				Restrictions.eq("caseNumber",contractId))
				.list();
		// 提交事务
		tx.commit();
		session.close();
		//提成详情
		String royaltyDetails="";
		for(int i=0;i<result.size();i++){
			TblRoyaltyInfo tri=(TblRoyaltyInfo)result.get(i);
			royaltyDetails+=tri.getRoyaltyTime().toString().substring(0, 10)+": 提成"+tri.getRoyaltyMoney()+"元，";
		}
		return royaltyDetails;
	}

	/**
	 * 律师提成操作
	 * @param contractId：合同编号
	 * @param royaltyTime：提成时间
	 * @param royaltyMoney：提成金额
	 * @param royaltyRemark：提成备注
	 * @return：1：提成成功
	 */
	public int lawyerRoyaOperation(String contractId,String royaltyTime,String royaltyMoney,String royaltyRemark){

		//新建提成对象
		cn.jsj.pojo.TblRoyaltyInfo tri=new cn.jsj.pojo.TblRoyaltyInfo();
		tri.setRoyaltyMoney(Integer.parseInt(royaltyMoney));
		tri.setCaseNumber(contractId);
		tri.setRoyaltyTime(cn.jsj.utils.TimeDispose.transferDate(royaltyTime));
		tri.setRoyaltyRemark(royaltyRemark);
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		session.save(tri);
		// 提交事务
		tx.commit();
		session.close();
		return 1;
	}

	/**
	 * 获得某个律师在某段时间内他所有案件的提成总金额
	 * @param lpp：参数类
	 * @return：提成总金额
	 */
	public int getLawyerTotalRoyatyMoney(cn.jsj.bgtodb.LawyerPerformanceProperty lpp){

		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		String hql="select sum(r.royaltyMoney) from TblRoyaltyInfo r, TblCaseInfo c where r.caseNumber=c.contractNumber and c.undertakeLawyer=? and c.caseSignTime between?and?";
		List result=session.createQuery(hql)
		.setInteger(0, lpp.getLpLawyerId())
		.setDate(1, lpp.getLpstartTime())
		.setDate(2, lpp.getLpendTime())
		.list();

		// 提交事务
		tx.commit();
		session.close();
		if(result==null||result.isEmpty()){
			return 0;
		}else{
			if(result.get(0)==null){
				return 0;
			}
			return Integer.parseInt(((Long)result.get(0)).toString());
		}
	}


	/**
	 * 获得律师提成报表信息
	 * @param lcp：参数类
	 * @return：律师提成报表信息
	 */
	public List getLawyerRoyaltyChart(cn.jsj.bgtodb.LawyerChartProperty lcp){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		String hql="select c.undertakeLawyer,sum(r.royaltyMoney) from TblRoyaltyInfo r, TblCaseInfo c where r.caseNumber=c.contractNumber and c.caseSignTime between?and? group by c.undertakeLawyer";
		List result=session.createQuery(hql)
		.setDate(0, lcp.getStartTime())
		.setDate(1, lcp.getEndTime())
		.list();

		// 提交事务
		tx.commit();
		session.close();
		return result;
	}

	/**
	 * 获取案件类别编号报表实际提出总金额信息类
	 * @param ctcp:案件类别报表信息类
	 * @return：提出总金额
	 */
	public int getCaseTypeChartRoyaMoney(cn.jsj.bgtodb.CaseTypeChartProperty ctcp){

		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		String hql="select sum(r.royaltyMoney) from TblRoyaltyInfo r, TblCaseInfo c where r.caseNumber=c.contractNumber and c.caseType=? and c.caseSignTime between?and?";
		List result=session.createQuery(hql)
		.setInteger(0, ctcp.getCaseTypeNumber())
		.setDate(1, ctcp.getStartTime())
		.setDate(2, ctcp.getEndTime())
		.list();

		// 提交事务
		tx.commit();
		session.close();
		if(result==null||result.isEmpty()){
			return 0;
		}else{
			if(result.get(0)==null){
				return 0;
			}
			return Integer.parseInt(((Long)result.get(0)).toString());
		}

	}



	/**
	 * 获得在某段时间所业绩中律师提出信息
	 * @param et: 时间段参数类
	 * @return：提成总金额信息
	 */
	public int getOfficeRoyaltyMoney(cn.jsj.bgtodb.ExcerptTime et){

		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		String hql="select sum(r.royaltyMoney) from TblRoyaltyInfo r where r.royaltyTime between?and?";
		List result=session.createQuery(hql)
		.setDate(0, et.getStartTime())
		.setDate(1, et.getEndTime())
		.list();
		// 提交事务
		tx.commit();
		session.close();
		if(result==null||result.isEmpty()){
			return 0;
		}else{
			if(result.get(0)==null){
				return 0;
			}
			return Integer.parseInt(((Long)result.get(0)).toString());
		}
	}
}